home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 4 / Precision Software Applications Silver Collection Volume 4 (1993).iso / stats / chadyn.exe / YCOMY.C < prev    next >
Text File  |  1988-12-15  |  5KB  |  179 lines

  1.  
  2.  
  3. /*******************************  YCOMY.C   **********************************/
  4. /*************************** Y COMMANDS AND MENU *****************************/
  5. /********************* (C) 1986,7,8 by JAMES A. YORKE ************************/
  6.  
  7.  
  8. #include "yinclud.h"
  9.  
  10.  
  11. menuY() 
  12. {
  13.     int     i;
  14.     int     minimum = ((eqn1 < dim) ? eqn1 : dim);
  15.  
  16.     if(level == SETPARAM)
  17.         scr_clr();    /* in desmets pcio.a */
  18.     scr_rowcol(2, 0);
  19.  
  20.     PRINT
  21.   "\n\nVectors-- y[]=current state, y1[]=cursor position, yx[] are for storage"
  22.         );
  23.     PRINT
  24.        "\nstate vec y[];  storage vec #1: y1[];  storage vec 2: y2[];\n");
  25.     for(i = 0; i < minimum; i++)
  26.         PRINT
  27.             " y[%d] = %lf;   y1[%d] = %lf;   y2[%d] = %lf;\n",
  28.             i, y[i], i, y[eqn0 + i], i, y[eqn0 + eqn1 + i]);
  29.     if(y[eqn0 + 2 * eqn1] != -9999.|| y[eqn0 + 3 * eqn1] != -9999.
  30.             || y[eqn0 + 4 * eqn1] != -9999.) 
  31.     {
  32.         PRINT
  33.     "storage vec #3: y3[];  storage vec 4: y4[];  storage vec 5: y5[];\n");
  34.         for(i = 0; i < minimum; i++)
  35.             PRINT
  36.             " y3[%d] = %lf;   y4[%d] = %lf;   y5[%d] = %lf;\n",
  37.                 i, y[eqn0 + 2 * eqn1 + i], i, y[eqn0 + 3 * eqn1 + i],
  38.                 i, y[eqn0 + 4 * eqn1 + i]);
  39.     }
  40.  
  41.     if(ye[0] != -9999 || ya[0] != -9999
  42.             || yb[0] != -9999) 
  43.     {
  44.         PRINT
  45. "storage vec a: ya[];   storage vec b: yb[];   storage vec e: ye[];\n");
  46.         for(i = 0; i < minimum; i++)
  47.             PRINT
  48.                " ya[%d] = %lf;   yb[%d] = %lf;   ye[%d] = %lf;\n",
  49.                 i, ya[i], i, yb[i], i, ye[i]);
  50.     }
  51.     PRINT "\n SV:    Set Values of a storage vector   \n");
  52.     PRINT " M:     Set one storage vector Equal to another  \n");
  53.     PRINT " INIT:  INITialize: change y to equal y1 \n");
  54.     PRINT
  55. " Yx: list coordinates of yx[] where x = 0,1,...9 or = a,b,c,d,e        \n\n");
  56. }
  57.  
  58. int     Ycommands(CodeName)
  59. register char    *CodeName;
  60. {
  61.     int     i,
  62.             outcome,
  63.             chr;
  64.     char    ch;
  65.     double *py;
  66.     int     minimum = ((eqn1 < dim) ? eqn1 : dim);
  67.  
  68.     if(CodeName[0] == 'y' && (ch = CodeName[1]) != '\0'
  69.             && CodeName[2] == '\0') 
  70.     {
  71.         if(ch >= '0' && ch <= '9') 
  72.         {
  73.             chr = ch - '0';
  74.             PRINT "storage vec #%c: y%c[] has values:   \n"
  75.                 , ch, ch);
  76.             for(i = 0; i < minimum; i++)
  77.                 if(chr == 0)
  78.                     PRINT
  79.                     " y%c[%d] = %lf; \n", ch, i, y[i]);
  80.                 else
  81.                     PRINT
  82.         " y%c[%d] = %lf; \n", ch, i, y[eqn0 + (chr - 1) * eqn1 + i]);
  83.         }
  84.         else
  85.             if(ch >= 'a' && ch <= 'e') 
  86.             {
  87.                 if(ch == 'a')
  88.                     py = ya;
  89.                 if(ch == 'b')
  90.                     py = yb;
  91.                 if(ch == 'c')
  92.                     py = yc;
  93.                 if(ch == 'd')
  94.                     py = yd;
  95.                 if(ch == 'e')
  96.                     py = ye;
  97.                 PRINT 
  98.             "storage vec #%c: y%c[] has values:   \n", ch, ch);
  99.                 for(i = 0; i < minimum; i++)
  100.                     PRINT
  101.                     " y%c[%d] = %lf; \n", ch, i, py[i]);
  102.             }
  103.             else
  104.                 PRINT "y%c is not a storage vector\n\n", ch);
  105.         return(1);
  106.     }
  107.     TEST2("i","init")
  108.     {
  109.         interrupti();/* in YINTRPT.C -- initializes y */
  110.         return(1);
  111.     }
  112.     TEST("sv") {
  113.         outcome = ChooseStorageVec(0);
  114.                 /* 0 means the character must be gotten
  115.                    elsewhere */
  116.         if(outcome == 1)
  117.             while(ScanfForCoefs (0, dim, ystore_in)) 
  118.             {;
  119.             }    /* keep on scanning for coefficients as long as
  120.                    1 is being returned; the coordinates
  121.                    acceptable are >= A = 0 and < B = dim; the
  122.                    routine asks for a coordinate first; if it
  123.                    is acceptable, it asks for a double
  124.                    precision value to plug into the
  125.                    corresponding coordinate; if succesful, and
  126.                    coord < B-1, a 1 is retuned so inputting can
  127.                    continue; otherwise 0 is returned; if the
  128.                    routine is not successful in getting both a
  129.                    coordinate and a double, pVec is not changed
  130.                    */
  131.         return(1);
  132.     }
  133.     TEST("m") 
  134.     {
  135.         MoveVec();
  136.         return(1);
  137.     }
  138.     return(0);
  139. }
  140.  
  141.  
  142. interrupti() 
  143. {
  144.     stoplines();         /* for stopping drawing connected lines */
  145.     if(printer > 0)
  146.         if(images > 0) {
  147.             scr_rowcol(1, 0);
  148.             erase_line();
  149.             PRINT "Number of images of small cross WAS %d\n"
  150.                 ,images);
  151.             erase_line();
  152.             PRINT "Now number of images = 0\n");
  153.         }
  154.     images = 0;
  155.     start();        /* sets dot = 0 and lyap exponents are
  156.                    restarted */
  157.     turnoff(BIGCROSS);
  158.     setequal(0, 1, eqn1);
  159.  
  160.  /* Now if vec = y1 and the cross is turned off, then turn it on */
  161.  
  162.     if (level > 2)
  163.     {
  164.         ResetScrnLineAtTop();
  165.         plotSomething(0);/* 0 means do not iterate map */
  166.         erase_line();
  167.         time0 = timeofday();
  168.         dotAtTime0 = dot;
  169.         PRINT "Current point: X=%12.12lf Y=%12.12lf\r",
  170.                 plotX,plotY);
  171. #ifndef MAINFRAME
  172.         if (cycle > 0)
  173.         {
  174.             SetCross(BIGCROSS);
  175.         }        
  176. #endif /* ifndef MAINFRAME */
  177.     }
  178. }
  179.